package com.ruoyi.vqms.mapper;

import com.ruoyi.vqms.domain.VQMSQueue;
import com.ruoyi.vqms.domain.dto.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 排队 数据层
 */
public interface VQMSQueueMapper {

    List<VQMSQueue> selectList(VQMSQueue vqmsQueue);

    int add(VQMSQueue vqmsQueue);

    VQMSQueue getById(Long id);

    VQMSQueue getByReservationId(Long reservationId);

    int update(VQMSQueue vqmsQueue);

    int delete(Long[] ids);
    /**
     * 查询所在队列，正在排队/装卸货中的数量
     * @param areaId
     * @return
     */
    int countByAreaId(Long areaId);
    /**
     * 查询所在队列，最大排队序号
     * @param areaId
     * @return
     */
    Integer getMaxQueueIndex(Long areaId);
    /**
     * 查询所在队列，装卸货中的序号
     * @return
     */
    VQMSQueue getLoadingQueue(Long areaId);
    /**
     * 查询所在队列，所有排队中的集合
     * @return
     */
    List<VQMSQueue> getWaitingQueue(Long areaId);

    /**
     * 查询所在队列，所有排队中大于自己排队序号的集合
     * @return
     */
    List<VQMSQueue> getMoreThanWaitingQueue(@Param("areaId") Long areaId, @Param("queueIndex")int queueIndex);
    /**
     * 查询昨日所有的排队中的车辆
     * @return
     */
    List<VQMSQueue> selectYesterdayWaitingQueue();

    /**
     * 按排队顺序查询排队车辆（当日）
     * @return
     */
    List<VQMSQueue> getQueueList(Long areaId);

    /**
     * 仓管员查询当日排队信息
     * @param vqmsQueue
     * @return
     */
    List<VQMSQueue> warehouseSelectList(@Param("vqmsQueue") VQMSQueue vqmsQueue,@Param("locationList") List<String> locationList);

    /**
     * 查询司机是否有未完成排队
     * @param driverPhone
     * @return
     */
    List<VQMSQueue> selectQueue(String driverPhone);

    /**
     * 查询当日排队信息（状态为装卸货中或者排队中）
     * @param vqmsQueue
     * @return
     */
    List<VQMSQueue> selectQueueList(VQMSQueue vqmsQueue);

    /**
     * 查询所有未完成的排队
     * @return
     */
    List<VQMSQueue> selectTimeoutList();

    /**
     * 根据队列ID查询所有未完成的排队
     * @return
     */
    List<VQMSQueue> selectAreaTimeoutList(Long areaId);


    /**
     * 查询今日未完成的排队(数据大屏)
     * @return
             */
    List<ToDayQueueVO> selectToDayList();

    /**
     * 统计今日排队信息
     * @return
     */
    ToDayQueueSummaryVO statisticsToDayQueue();

    /**
     * 统计排队车牌省市比例
     * @return
     */
    List<CityProportionVO> selectCity();

    /**
     * 统计近7日仓库排队时间段峰值
     * @return
     */
    List<QueueTimePeakValueVO> selectQueuePeak();

    /**
     * 统计近7日排队队列总数
     * @return
     */
    List<AreaQueueVO> selectAreaCount();
}
